查看原文
其他

Java 文件处理 Paths & Files

SpringForAll社区 SpringForAll社区 2021-05-26
点击上方☝SpringForAll社区 轻松关注!
及时获取有趣有料的技术文章

文件路径的描述与操作 Path & Paths

1、文件路径字符串转 Patsh 对象

1Path filePath = Paths.get("/Users/Anoyi/aaa.txt");

另一种写法:

1Path filePath = Paths.get("/Users""Anoyi""aaa.txt");

2、 Path 对象常用操作

1# 获取文件名 aaa.txt
2filePath.getFileName()
3
4# 获取父路径 /Users/Anoyi
5filePath.getParent()
6
7# 获取文件层级数量 3
8filePath.getNameCount()
9
10# 获取指定层级文件(夹)名 Anoyi
11filePath.getName(1)
12
13# 获取同级目录其他文件(夹) /Users/Anoyi/bbb.txt
14filePath.resolveSibling("bbb.txt")
15
16# 获取同级目录其他文件(夹) /Users/Anoyi/zzz/bbb.txt
17filePath.resolveSibling("zzz/bbb.txt")
18
19# 获取子级目录其他文件(夹) /Users/Anoyi/aaa.txt/bbb.txt
20filePath.resolve("bbb.txt")
21
22# 获取绝对路径 /Users/Anoyi/aaa.txt ,如果是 Paths.get("Users/Anoyi/aaa.txt"),则绝对路径为:项目绝对路径 + "/Users/Anoyi/aaa.txt"
23filePath.toAbsolutePath()
24
25# 转化为文件
26filePath.toFile()

文件操作 Path & Files

基本操作

1Path dirPath = Paths.get("/Users/Anoyi");
2
3# 校验文件(夹)存在
4Files.exists(dirPath)
5
6# 校验文件(夹)不存在
7Files.notExists(dirPath)
8
9# 校验是否为文件夹
10Files.isDirectory(dirPath)
11
12# 校验是否为文件 /Users/Anoyi/aaa.txt
13Files.isRegularFile(dirPath.resolve("aaa.txt"))
14
15# 创建文件 /Users/Anoyi/bbb.txt
16Files.createFile(dirPath.resolve("bbb.txt"))
17
18# 创建文件夹 /Users/Anoyi/xxx
19Files.createDirectory(dirPath.resolve("xxx"))
20
21# 创建多级文件夹 /Users/Anoyi/yyy/zzz
22Files.createDirectory(dirPath.resolve("yyy/zzz"))
23
24# 文件(夹) 删除
25Files.delete(dirPath)
26Files.deleteIfExists(dirPath)
27
28# 文件(夹)复制 /Users/Anoyi/aaa.txt == /Users/Anoyi/ccc.txt
29Files.copy(dirPath.resolve("aaa.txt"), dirPath.resolve("ccc.txt"))
30
31# 文件(夹)移动 /Users/Anoyi/aaa.txt => /Users/other/aaa.txt
32Files.move(dirPath.resolve("aaa.txt"), Paths.get("/Users/other/aaa.txt"), StandardCopyOption.REPLACE_EXISTING)

文件读写

1Path filePath = Paths.get("/Users/Anoyi/aaa.txt");
2
3# 读所有行文本,默认使用 UTF-8
4Files.readAllLines(filePath, Charset.defaultCharset())
5
6# 读字节数组
7Files.readAllBytes(filePath)
8
9# 写文本
10Files.write(filePath, Arrays.asList("line1""line2"))
11
12# 写字节数组
13Files.write(filePath, new byte[]{})
14
15# 更灵活的写入数据
16Files.newBufferedWriter(filePath).write(...)
17
18# 获取 InputStream
19Files.newInputStream(filePath)
20
21# 获取 OutputStream
22Files.newOutputStream(filePath)

文件列表与查找

1Path dirPath = Paths.get("/Users/Anoyi");
2
3# 文件列表
4Files.list(dirPath)
5
6# 文件查找,查找路径深度 5
7Files.find(dirPath, 5, <条件>)

常用场景

1、文件列表,中文排序

1    /**
2     * 文件(夹)列表
3     *
4     * @param path 路径
5     */

6    public List<File> listDirs(String path) throws IOException {
7        Path dirPath = Paths.get(path);
8        if (Files.isDirectory(dirPath)) {
9            Comparator<BaseFileBean> comparing = (o1, o2) -> Collator.getInstance(Locale.CHINESE).compare(o1.getName(), o2.getName());
10            return Files.list(Paths.get(path)).map(Path::toFile).sorted(comparing).collect(Collectors.toList());
11        }
12        return new ArrayList<>();
13    }

2、文件查找,忽略英文大小写

1    /**
2     * 查找文件(夹)
3     */

4    public List<BaseFileBean> findFiles(String folder, String keyword) throws IOException {
5        final int MAX_DEPTH = 5;
6        File dir = new File(folder);
7        if (dir.exists() && dir.isDirectory()) {
8            final String lowerKeyword = keyword.toLowerCase();
9            Comparator<BaseFileBean> comparing = (o1, o2) -> Collator.getInstance(Locale.CHINESE).compare(o1.getName(), o2.getName());
10            Stream<Path> stream = Files.find(Paths.get(folder), MAX_DEPTH, (path, basicFileAttributes) -> path.getFileName().toString().toLowerCase().contains(lowerKeyword));
11            return stream.map(Path::toFile).sorted(comparing).collect(Collectors.toList());
12        }
13        return new ArrayList<>();
14    }





● Spring Boot 默认的指标数据从哪来的?

● 技术人面对裁员的终极解决方案-反脆弱

● Spring本质系列(2)-AOP

● Java 中的类型传递问题解惑

● Java阻塞队列的简单实现

● Spring 的本质系列(1) -- 依赖注入

● java匠人手法-优雅的处理空值

● REST API 的安全基础

● 深入浅出 CAS

● Spring Boot Devtools热部署

● Spring Boot AOP记录用户操作日志

● Spring Boot整合Mongo DB

● 【图文讲解】你一定能看懂的HTTPS原理剖析!

●  基础面试,为什么面试官总喜欢问String?

●  Spring Boot Admin 2.2.0发布,支持最新Spring Boot/Cloud之外,新增中文展示!

●  你应该知道的 @ConfigurationProperties 注解的使用姿势,这一篇就够了





如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存